package cn.sdormitory.service;

import cn.sdormitory.attendance.vo.AttendanceRuleTimeSlot;
import cn.sdormitory.basedata.entity.BClass;
import cn.sdormitory.basedata.vo.*;
import cn.sdormitory.common.IdAndName;
import cn.sdormitory.common.utils.ContainerUtil;

import java.util.Collection;
import java.util.Collections;
import java.util.List;

/**
 * @创建人：zhouyang
 * @创建时间：2021/11/10 17:49
 * @version：V1.0
 */
public interface AppClassService {
    List<IdAndName<Long>> getIdAndNames();
    List<BClassVo> getAppClassListByTeaId(Long loginId);
    List<BClassStudentVo> getAppClassStuListByCName(String className);
    List<BClassDorVo> getAppClassDorListByTeaId(Long classTeacherId);
    List<ClassDeptVo> getAppClassDept();
    List<BClassVo> getAppClassDeptByClaId(Long classDeptId);
    List<BClassDeptVo> getAppClassDeptAccDvByDeptId(String accessDate,Long classDeptId,String timeSlot);
    List<BClassDeptHyVo> getAppClassDeptHyByDeptId(String accessDate,Long classDeptId,String timeSlot);
    List<BClassDeptReVo> getAppClassDeptReByDeptId(Long classDeptId);
    List<BClassVo> getAllAppClassList();
    List<BClassStudentVo> getClassStuListByClassId(String classId);
    List<BClassStudentVo> getClassStuListAllByClassId(String classId);

    Integer getBoardingStuCountByClassId(String classId);

    Integer getLeaveStuCountByClassId(String classId);

    BClass getClassInfoByClassId(Long classId);

    int UpdateClassInfo(BClass bClass);
    List<BStudentListVo> getStudentListByClassId(int classId);
    int updateStudent(int id,String studentName,String studentPhone,String parentPhone);

    /**
     * 根据班级id查看对应的周末未打卡名单列表
     * @author alex
     * @param: classId
     * @date 2024/9/14 14:28
     * @return
     */
	List<BStudentListVo> getWeekendNotClockInListByCId(Long classId, String checkDate);

    /**
     * 根据班级id查看对应的晚寝未打卡名单列表
     * @author alex
     * @param: classId
     * @date 2024/9/30 10:47
     * @return
     */
    List<BStudentListVo> getDormitoryNotClockInListByCId(Long classId, String checkDate);

    /**
     * 根据班级id查询宿舍id列表
     *
     * @param classId
     * @return
     */
    List<Long> getDorIdsByClassId(Long classId);

    default List<BClassVo> getAppClassByDeptId(Long deptId){
        if(deptId == null){
            return Collections.emptyList();
        }
        return getAppClassByDeptIds(ContainerUtil.newSingleList(deptId));
    }

    List<BClassVo> getAppClassByDeptIds(Collection<Long> deptIds);

    List<BClassVo> getAppClassByDeptManager();

    List<AttendanceRuleTimeSlot> getClassRuleTimeSlots(Long classId);
}
